#pragma once

#include <vector>
#include <memory>

#include "Viewport.h"
#include "Geometry.h"

#include "Tile.h"
#include "TileType.h"

#include "Entity.h"
#include "EntityLiving.h"

using namespace std;

typedef std::vector<std::shared_ptr<Entity>> EntityHolder;

class GameWorld
{
private:
	EntityHolder entities;
	EntityHolder::iterator currentEntity;

	int sizeX;
	int sizeY;

	TileType *tileType[50];
	Tile *tiles[1000][1000];

public:
	// ################
	// ## Gameworld manipulation
	// ################
	void addRandomHumanDummy(float x, float y);
	void addRandomHumanDummy(Vector2 pos);

	// ################
	// ## System
	// ################
	void draw(Viewport *viewport);
	GameWorld(int viewportWidth, int viewportHeight);
	~GameWorld(void);
};

